home *** CD-ROM | disk | FTP | other *** search
Lisp/Scheme | 1988-04-07 | 2.1 KB | 72 lines | [TEXT/ttxt] |
- ;; Larry Mulcahy 1988
- ;; set functions
-
- (provide 'set)
- (require 's-expression "s-expr")
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; intersection
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun intersection (x y &key (test #'eql))
- (if x
- (let*
- ((uh (car x))
- (recursion
- (intersection (remove uh (cdr x) :test test)
- (remove uh y :test test) :test test)))
- (if (member uh y)
- (cons uh recursion)
- recursion))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; set-difference
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun set-difference (x y &key (test #'eql))
- (if x
- (let*
- ((uh (car x))
- (recursion
- (set-difference (remove uh x :test test)
- (remove uh y :test test) :test test)))
- (if (member uh y :test test)
- recursion
- (cons uh recursion)))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; union
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun union (s1 s2 &key (test #'eql))
- (if s1
- (adjoin (car s1) (union (cdr s1) s2 :test test) :test test)
- s2))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; order-preserving-intersection
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun order-preserving-intersection (l1 l2 &key (test #'eql))
- (cond
- ((or (null l1) (null l2)) nil)
- ((member (car l1) l2 :test test)
- (cons (car l1)
- (order-preserving-intersection (cdr l1) l2)))
- ((order-preserving-intersection (cdr l1) l2))))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; order-preserving-set-difference
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun order-preserving-set-difference (l1 l2 &key (test #'eql))
- (cond
- ((null l2) l1)
- ((null l1) nil)
- ((member (car l1) l2 :test test)
- (order-preserving-set-difference (cdr l1) l2))
- ((cons (car l1)
- (order-preserving-set-difference (cdr l1) l2)))))
-
-
-